package com.eke.service;

import java.util.List;

import com.eke.bean.Article;
import com.eke.bean.ArticleType;
import com.eke.bean.Course;
import com.eke.bean.QuestionFrom;

public interface ArticleService {
	/**
	 * 添加文章
	 * 
	 * @param {@link
	 * 			Article}
	 * @return {@link Boolean}
	 */
	public boolean addArticle(Article article);

	/**
	 * 通过文章类型父ID查询出文章类型
	 * 
	 * @param articleSubTypeId
	 *            文章分类子id
	 * @return List<{@link ArticleType}>
	 */
	public List<ArticleType> queryArticleTypeBySubID(int articleSubTypeId);

	/**
	 * 通过文章类ID查询出文章类型
	 * 
	 * @param articleTypeId
	 *            文章类型id
	 * @return List<{@link Article}>
	 */
	public ArticleType qurryArticleTypeByParentId(int articleTypeId);

	/**
	 * 根据文章id查询文章详情
	 * 
	 * @param articleId
	 *            文章id
	 * @return {@link Article}
	 */
	public Article queryArticleByArticleId(int articleId);

	/**
	 * 查询文章数量
	 * 
	 * @return 文章总数
	 */
	public int queryArticleTotal();

	/**
	 * 查询所有文章
	 * 
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            每页数量
	 * @return 返回所有文章信息
	 */
	public List<Article> queryArticle(int startRow, int pageSize);

	/*-------------------------------------------------------------------*/
	/**
	 * 查询问题数量
	 * 
	 * @return 问题总数
	 */
	public int queryQuestionTotal();

	/**
	 * 查询所有问题
	 * 
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            每页数量
	 * @return 返回所有问题集合
	 */
	public List<Article> queryAllQuestion(int startRow, int pageSize);

	/**
	 * 分页查询出拼接问题
	 * 
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            每页数量
	 * @return 返回问题集合
	 */
	public List<QuestionFrom> queryQuestionByFrom(int startRow, int pageSize);

	/**
	 * 分页查询出拼接文章
	 * 
	 * @param startRow
	 * @param pageSize
	 * @return {@link List} <{@link QuestionFrom}> 返回问题集合
	 */
	public List<QuestionFrom> qurryPagingArticle(int startRow, int pageSize);

	/**
	 * 查询10篇文章
	 * 
	 * @return {@link List} <{@link Article}> 返回十篇文章集合
	 */
	public List<Article> queryTenArticle();

	/**
	 * 增加评论人数
	 * 
	 * @param articleId
	 *            文章或问题ID
	 * @return {@link boolean}
	 */
	public boolean addCommentNumber(int articleId);

	/*-------------------------------------------------------------------*/
	/**
	 * 根据用户id查询该用户所有文章
	 * 
	 * @param userId
	 *            用户id
	 * @return {@link List} <{@link Article}> 返回该用户发布的文章集合
	 */
	public List<Article> queryAllArticleById(Integer userId, Integer startRow, Integer pageSize);

	/**
	 * 根据用户id查询该用户所有问题
	 * 
	 * @param userId
	 *            用户id
	 * @return {@link List} <{@link Article}> 返回该用户发布的问题集合
	 */
	public List<Article> queryAllQuestionById(Integer userId);

	/**
	 * 根据文章id删除文章
	 * 
	 * @param articleId
	 * @return {@link Boolean}
	 */
	public boolean delectArticleById(Integer articleId);

	/**
	 * 根据问题id删除问题
	 * 
	 * @param articleId
	 * @return {@link Boolean}
	 */
	public boolean delectQuestionById(Integer articleId);

	/**
	 * 根据文章名查文章
	 * 
	 * @param articleTitle
	 *            文章标题
	 * @return {@link List} <{@link Article}> 返回文章集合
	 */
	public List<Article> queryArticleByName(String articleTitle);

	/**
	 * 查询所有文章
	 * 
	 * @return {@link List} <{@link Article}>
	 */
	public List<Article> queryArticle();

	/**
	 * 查询所有问题
	 * 
	 * @return {@link List} <{@link Article}> 返回所有问题集合
	 */
	public List<Article> queryQuestion();

	/**
	 * 结合分页，标题模糊查询文章信息
	 * 
	 * @param articleTitle
	 *            文章标题
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            数量
	 * @return {@link List} <{@link Article}> 返回模糊查询后符合条件的文章集合
	 */
	public List<Article> queryArticleByTitleLimit(String articleTitle, int startRow, int pageSize);

	/**
	 * 更改问题状态为解决
	 * 
	 * @return {@link Boolean}
	 */
	public boolean updateQuestionState(Integer questionId);

	/**
	 * 判断是否可以采纳评论
	 * 
	 * @param questionId
	 * @return {@link Boolean}
	 */
	public boolean isCanAgree(Integer questionId);

	/**
	 * 根据问题标题查询问题
	 * 
	 * @param articleTitle
	 *            问题标题
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            每页数量
	 * @return {@link List} <{@link Article}> 返回模糊查询后符合条件的问题集合
	 */
	public List<Article> queryQusetionByTitleLimit(String articleTitle, int startRow, int pageSize);

	/**
	 * 修改文章状态
	 * 
	 * @param id
	 *            文章id
	 * @return {@link Boolean}
	 */
	public boolean updateArticleState(Integer id);

}
